WebXR'da kontroller tugmalari holatini kuzatishni o'zlashtirib, immersiv tajribalarning to'liq salohiyatini oching. Bu qo'llanma butun dunyo dasturchilari uchun muhim tushunchalar, ilg'or amaliyotlar va amaliy misollarni o'z ichiga oladi.
WebXR Kiritishni O'zlashtirish: Kontroller Tugmalari Holatini Kuzatishning Chuqur Tahlili
Virtual Haqiqat (VR) va To'ldirilgan Haqiqat (AR)ni o'z ichiga olgan immersiv texnologiyalar manzarasi jadal rivojlanmoqda. Qiziqarli va interaktiv XR tajribalarini yaratishning markazida foydalanuvchi kiritishini aniq qabul qilish va unga javob berish qobiliyati yotadi. Veb-asosidagi XR uchun WebXR Device API kuchli tizimni taqdim etadi va kontroller tugmalarining holatini qanday kuzatishni tushunish intuitiv va sezgir ilovalarni yaratish uchun fundamental ahamiyatga ega. Ushbu keng qamrovli qo'llanma WebXR kontroller tugmalari holatini kuzatishning nozikliklarini chuqur o'rganib, butun dunyo bo'ylab dasturchilarga haqiqatan ham jozibali immersiv tajribalar yaratish imkonini beradi.
O'zaro Ta'sir Asosi: XR Kontrollerlarini Tushunish
Texnik tafsilotlarga sho'ng'ishdan oldin, bozorda mavjud bo'lgan XR kontrollerlarining xilma-xilligini qadrlash muhimdir. Ba'zi dizayn paradigmalari umumiy bo'lsa-da, platformalar va ishlab chiqaruvchilar o'rtasida farqlar mavjud. Odatda, XR kontrollerlari bir qator kiritish mexanizmlarini taklif qiladi:
- Tugmalar: Bular ikkilik holatlarni (bosilgan yoki bosilmagan) taklif qiluvchi eng keng tarqalgan kiritish elementlaridir. Ular bitta harakatli tugmalar, ikki harakatli tugmalar (masalan, ma'lum bir nuqtaga qadar siqilishi mumkin bo'lgan trigger) yoki hatto kompozit tugmalar bo'lishi mumkin.
- Bosh barmoq tayoqchalari/Joystiklar: Bular analog kiritishni ta'minlab, harakat va aylanishni nozik nazorat qilish imkonini beradi.
- Sensorli panellar/Trekpadlar: Ko'pincha yanada ixcham kontrollerlarda uchraydi, ular teginish holati, imo-ishoralar va teginishlarni aniqlay oladigan teginishga sezgir yuzalarni taklif qiladi.
- Ushlash sensorlari: Bu sensorlar foydalanuvchining kontrollerni qanchalik mahkam ushlayotganini aniqlaydi va ob'ektlarni ushlash kabi tabiiy o'zaro ta'sirlarni amalga oshirish imkonini beradi.
- Yo'nalish va O'rinni Kuzatish: Garchi to'g'ridan-to'g'ri tugma holatlari bo'lmasa-da, kontrollerlarning o'zini aniq fazoviy kuzatish kiritishning muhim tarkibiy qismidir.
Ushbu qo'llanma maqsadida biz asosan tugma holatini kuzatishga e'tibor qaratamiz, chunki u XR ilovalarining keng doirasi uchun asosiy o'zaro ta'sir usulini ifodalaydi.
WebXR Kiritish Manbalari: `XRSession` va `XRInputSource`
WebXR Device API kiritishni kiritish manbalari tushunchasi orqali tashkil qiladi. WebXR sessiyasi faol bo'lganda, brauzer ulangan XR qurilmalari va ularga bog'liq kiritish mexanizmlari haqida ma'lumot beradi.
XR sessiyasini boshqarish uchun asosiy ob'ekt `XRSession` hisoblanadi. Faol sessiya ichida siz mavjud kiritish manbalarini so'rashingiz mumkin:
const inputSources = xrSession.inputSources;
`inputSources` massividagi har bir element `XRInputSource` ob'ektidir. Bu ob'ekt VR kontrolleri yoki qo'l harakatini kuzatish tizimi kabi ma'lum bir kiritish qurilmasining imkoniyatlari va joriy holatini tushunish uchun eshik vazifasini o'taydi.
Tugmalarni Kuzatish uchun `XRInputSource` ning Asosiy Xususiyatlari
Jismoniy kontrollerlar bilan ishlaganda, `XRInputSource` ob'ekti bir nechta muhim xususiyatlarni taqdim etadi:
handedness: Kiritish manbai 'chap' yoki 'o'ng' qo'l uchun ekanligini bildiradi. Bu kiritishni to'g'ri vizual tasvir yoki o'yin qahramoni bilan bog'lash uchun juda muhimdir.targetRayMode: Kiritish manbaining sahna bilan qanday o'zaro ta'sir qilishini belgilaydi. Umumiy qiymatlar orasida 'gaze' (kiritish foydalanuvchining ko'rish nuqtasidan kelib chiqadi) va 'pointing' (kiritish kontrollerdan chiqadigan nurdan kelib chiqadi) mavjud.gamepad: Bu tugma holatini kuzatish uchun eng muhim xususiyatdir. U kontrollerdan olingan xom kiritish ma'lumotlarini o'z ichiga olgan standart `Gamepad` ob'ektiga kirishni ta'minlaydi.
`gamepad` xususiyati mo''jizalar sodir bo'ladigan joydir. Gamepad API tomonidan belgilangan `Gamepad` ob'ekti kontrollerning tugmalari va o'qlari haqida batafsil ma'lumot beradi.
`Gamepad` Ob'ekti va Tugma Indeksatsiyasi
`xrInputSource.gamepad` orqali kirish mumkin bo'lgan `Gamepad` ob'ekti kiritishni kuzatish uchun ikkita asosiy massivga ega:
buttons: `GamepadButton` ob'ektlari massivi. Har bir `GamepadButton` kontrollerdagi bitta tugmani ifodalaydi.axes: Bosh barmoq tayoqchalari va triggerlar kabi analog kiritishlarning holatini ifodalovchi raqamlar massivi (o'qlar sifatida qaralganda).
Eng muhimi, tugma holatlariga ularning indeksi orqali kiriladi. Tugmalarni indekslarga aniq moslashtirish kontroller turlariga qarab farq qilishi mumkin. Biroq, WebXR API imkon qadar, ayniqsa umumiy tugmalar uchun standartlashtirilgan moslashtirishni ta'minlashga harakat qiladi.
`GamepadButton` Xususiyatlarini Tushunish
`buttons` massividagi har bir `GamepadButton` ob'ekti quyidagi asosiy xususiyatlarga ega:
pressed: Agar tugma hozirda bosilayotgan bo'lsa `true`, aks holda `false` bo'lgan mantiqiy qiymat. Bu tugma bosilishini aniqlash uchun asosiy xususiyatdir.touched: Agar tugmada teginish sensori bo'lsa va hozirda foydalanuvchi tomonidan tegilayotgan bo'lsa `true` bo'lgan mantiqiy qiymat. Bu to'liq bosishdan oldin sichqonchani ustiga olib borish holatlarini yoki nozik teginishlarni aniqlash uchun foydalidir.value: 0.0 va 1.0 oralig'idagi o'zgaruvchan nuqtali son bo'lib, tugma bosimining kuchi yoki intensivligini ifodalaydi. Standart tugmalar uchun bu 0.0 yoki 1.0 bo'ladi. Analog triggerlar yoki adaptiv tugmalar uchun u oraliq qiymatlarni ifodalashi mumkin.
Tugma Holatlarini Kuzatish: Asosiy Mantiq
WebXR'da tugma holatlarini kuzatishning asosiy printsipi ilovangizning render sikli davomida `Gamepad` ob'ektini doimiy ravishda so'rashdir.
Buni amalga oshirishning konseptual sxemasi:
- `XRSession` ob'ektini oling: Bu odatda XR sessiyasi muvaffaqiyatli boshlanganda amalga oshiriladi.
- `inputSources` orqali iteratsiya qiling: Har bir animatsiya kadrida barcha ulangan `XRInputSource` ob'ektlari bo'ylab aylaning.
- `gamepad` mavjudligini tekshiring: Barcha kiritish manbalarida ham `gamepad` xususiyati bo'lmaydi (masalan, nigohga asoslangan kiritish).
- `gamepad.buttons` ga kiring: Agar `gamepad` mavjud bo'lsa, uning `buttons` massiviga kiring.
- Alohida tugma holatlarini tekshiring: `buttons` massivi bo'ylab iteratsiya qiling va har bir `GamepadButton` ning `pressed` xususiyatini tekshiring.
Amaliy Misol: Asosiy Tugma Bosilishini Aniqlash
Keling, soddalashtirilgan JavaScript misoli bilan ko'rib chiqaylik. Ushbu kod parchasi sizda faol `xrSession` ob'ekti borligini va animatsiya sikli ichida ekanligingizni nazarda tutadi.
let primaryButtonIsPressed = false;
function renderLoop(time, frame) {
// Joriy kadr uchun XRReferenceSpace'ni oling
const xrRefSpace = frame.session.requestReferenceSpace('local');
// Kiritish manbalari bo'yicha takrorlang
for (const inputSource of frame.session.inputSources) {
if (inputSource.gamepad) {
const gamepad = inputSource.gamepad;
// Umumiy tugma indekslari:
// Indeks 0: Asosiy tugma (masalan, Oculus Touch'dagi A, Vive Wands'dagi X)
// Indeks 1: Ikkilamchi tugma (masalan, Oculus Touch'dagi B, Vive Wands'dagi Y)
// Indeks 2: Asosiy trigger (ko'pincha analog)
// Indeks 3: Ikkilamchi trigger (ko'pincha analog)
// Indeks 4: Bosh barmoq tayoqchasi/Trekpad bosilishi
// Keling, asosiy tugmani (indeks 0) kuzataylik
const primaryButton = gamepad.buttons[0];
if (primaryButton) {
// Yangi bosishni aniqlang (bosilmagan holatdan bosilgan holatga o'tish)
if (primaryButton.pressed && !primaryButtonIsPressed) {
console.log(`${inputSource.handedness} kontrollerida asosiy tugma bosildi!`);
// Bu yerda ilovangizning harakatini ishga tushiring
// Masalan, snaryad otish, ob'ektni tanlash va hokazo.
}
// Qo'yib yuborishni aniqlang (bosilgan holatdan bosilmagan holatga o'tish)
if (!primaryButton.pressed && primaryButtonIsPressed) {
console.log(`${inputSource.handedness} kontrollerida asosiy tugma qo'yib yuborildi.`);
// Agar kerak bo'lsa, tugmani qo'yib yuborish mantig'ini ishlating
}
primaryButtonIsPressed = primaryButton.pressed;
}
// Buni boshqa tugmalar, triggerlar yoki o'qlarni kuzatish uchun kengaytirish mumkin...
// const triggerButton = gamepad.buttons[2]; // Trigger uchun misol
// if (triggerButton) {
// console.log(`${inputSource.handedness} dagi trigger qiymati: ${triggerButton.value}`);
// }
}
}
// ... rendering mantig'ingizning qolgan qismi ...
xrSession.requestAnimationFrame(renderLoop);
}
// Sessiya faollashgandan so'ng animatsiya siklini boshlang
// xrSession.requestAnimationFrame(renderLoop);
Tugma Indekslarini Moslashtirish: Labirintdan O'tish
Aytib o'tilganidek, tugma indekslari juda muhim. WebXR API standartlashtirishga intilayotgan bo'lsa-da, potentsial o'zgarishlardan xabardor bo'lish zarur. Mana umumiy tugma indekslari bo'yicha umumiy qo'llanma, garchi siz har doim o'z maqsadingizdagi uskunada sinovdan o'tkazishingiz kerak:
Umumiy VR Kontroller Moslamalari (taxminiy):
| Indeks | Umumiy Tugma Nomi | Tavsif | Eslatmalar |
|---|---|---|---|
| 0 | Asosiy Tugma (A/X) | Odatda kontrollerning yuzidagi kattaroq, ko'zga ko'ringan tugma. | Ko'pincha tanlash, tasdiqlash yoki asosiy harakat uchun ishlatiladi. |
| 1 | Ikkilamchi Tugma (B/Y) | Yana bir yuz tugmasi, odatda kichikroq. | Ko'pincha orqaga, bekor qilish yoki ikkilamchi harakatlar uchun ishlatiladi. |
| 2 | Trigger Tugmasi | Asosiy trigger, ko'pincha analog. | Otish, asboblarni faollashtirish yoki tezlashtirish uchun ishlatiladi. |
| 3 | Ikkilamchi Trigger (masalan, ushlash tugmasi) | Ikkilamchi trigger yoki ushlash tugmasi. | Ko'pincha ob'ektlarni ushlash yoki ikkilamchi harakatlar uchun ishlatiladi. |
| 4 | Bosh barmoq tayoqchasi/Trekpad Tugmasi | Bosh barmoq tayoqchasini bosish yoki trekpadga teginish. | Sakrash, egilish yoki menyularni ochish kabi harakatlar uchun ishlatiladi. |
| 5 | Yelka Tugmasi 1 (masalan, L1/R1) | Odatda asosiy trigger ustida joylashgan tugma. | Kamroq tarqalgan, ammo qo'shimcha harakatlar uchun ishlatilishi mumkin. |
| 6 | Yelka Tugmasi 2 (masalan, L2/R2) | Ikkilamchi trigger ustidagi yana bir tugma. | Kamroq tarqalgan. |
| 7 | Menyu Tugmasi (masalan, Start/Select) | Maxsus menyu yoki sozlamalar tugmasi. | Ko'pincha o'yin ichidagi menyularni yoki tizim menyularini ochish uchun ishlatiladi. |
| 8 | Bosh barmoq tayoqchasi/Trekpad X O'qi | Bosh barmoq tayoqchasi/trekpadning gorizontal harakati. | -1.0 va 1.0 oralig'idagi qiymatni qaytaradi. |
| 9 | Bosh barmoq tayoqchasi/Trekpad Y O'qi | Bosh barmoq tayoqchasi/trekpadning vertikal harakati. | -1.0 va 1.0 oralig'idagi qiymatni qaytaradi. |
Muhim Mulohazalar:
- Kontrollerga Xos Moslashtirish Vositalari: Aniq moslashtirish uchun ma'lum VR garnituralari (masalan, Oculus Quest, HTC Vive, Valve Index) uchun hujjatlarga murojaat qiling. Ko'pgina dasturchilar ham jamiyat tomonidan boshqariladigan moslashtirish resurslaridan foydalanadilar yoki o'zlarining ichki moslashtirish qatlamlarini yaratadilar.
- `XRSession.inputSources.gamepad.mapping`: Bu xususiyat ba'zan kontrollerning moslashuvi haqida ma'lumot berishi mumkin (masalan, 'xr-standard').
- Keng Qamrovli Sinovdan O'tkazing: Eng yaxshi yondashuv ilovangizni maqsadli uskunada sinab ko'rish va kerakli harakatlarga mos keladigan tugma indekslarini kuzatishdir.
Har Xil Kiritish Turlarini Boshqarish: Tugmalar, O'qlar va Teginish
`pressed` ikkilik tugma holatlari uchun ideal bo'lsa-da, boshqa xususiyatlar yanada nozik nazoratni taklif qiladi:
touched: Barmoq tugma ustida turganini aniqlash, sichqonchani ustiga olib borish effektlarini yoki bosishdan oldingi tayyorgarlik harakatlarini yoqish uchun foydali.value(tugmalar uchun): Standart tugmalar uchun `value` odatda 0 yoki 1 bo'ladi. Biroq, ba'zi kontrollerlarda bosimga sezgirlikni qo'llab-quvvatlaydigan adaptiv triggerlar yoki tugmalar bo'lishi mumkin.value(o'qlar uchun): Bu bosh barmoq tayoqchalari va analog triggerlar uchun juda muhimdir. 0 qiymati odatda neytral pozitsiyani ifodalaydi, -1.0 yoki 1.0 ga yaqinroq qiymatlar esa ma'lum bir yo'nalishda harakatlanishni yoki triggerning to'liq tortilishini bildiradi.
Misol: Harakat Tezligi uchun Trigger Qiymatidan Foydalanish
let movementSpeed = 0;
function renderLoop(time, frame) {
// ... (xrSession'ni oling, inputSources'ni iteratsiya qiling) ...
for (const inputSource of frame.session.inputSources) {
if (inputSource.gamepad) {
const gamepad = inputSource.gamepad;
// Misol: Oldinga harakatlanish uchun asosiy triggerni (indeks 2) ishlatish
const triggerButton = gamepad.buttons[2];
if (triggerButton) {
// Trigger tugmasining 'value' xususiyati analog kiritishni ta'minlaydi
movementSpeed = triggerButton.value;
console.log(`Harakat tezligi: ${movementSpeed.toFixed(2)}`);
// Ushbu harakat tezligini qahramoningiz yoki ob'ektingizning tezligiga qo'llang
}
// Misol: Burilish uchun bosh barmoq tayoqchasi X-o'qini (indeks 8) ishlatish
const thumbstickX = gamepad.axes[8];
if (thumbstickX !== undefined) {
const turnAmount = thumbstickX;
console.log(`Burilish miqdori: ${turnAmount.toFixed(2)}`);
// Ushbu burilish miqdorini qahramoningizning aylanishiga qo'llang
}
}
}
// ... rendering mantig'ingizning qolgan qismi ...
xrSession.requestAnimationFrame(renderLoop);
}
Holatni Boshqarish: Kiritishdagi Titroqlardan Qochish va Sezgirlikni Ta'minlash
Keng tarqalgan xato bu harakatlarni bitta kadrda faqat `pressed` holatiga asoslanib to'g'ridan-to'g'ri ishga tushirishdir. Bu kadr vaqtining nomuvofiqligi tufayli harakatlarning bir necha marta beixtiyor ishga tushishiga yoki umuman ishga tushmasligiga olib kelishi mumkin.
Eng ishonchli yondashuv tugma holatlarining o'tishini kuzatishdir:
- Bosilganda: Tugma `false` (bosilmagan) dan `true` (bosilgan) ga o'zgarganini aniqlang. Bu sizning aniq tugma bosish hodisangizdir.
- Qo'yib yuborilganda: Tugma `true` (bosilgan) dan `false` (bosilmagan) ga o'zgarganini aniqlang. Bu faqat tugma bosib turilganda sodir bo'lishi kerak bo'lgan harakatlar yoki qo'yib yuborilganda yakunlanadigan harakatlarni boshlash uchun foydalidir.
- Ushlab Turilganda: Uzluksiz harakatlar (harakatlanish yoki doimiy effektlar kabi) uchun siz odatda har bir kadrda `pressed` holatini tekshirasiz va u haqiqiy bo'lib qolguncha tegishli mantiqni qo'llaysiz.
Yuqorida keltirilgan misol (`primaryButtonIsPressed`) yangi bosishlar va qo'yib yuborishlarni aniqlash uchun ushbu holatni kuzatish yondashuvini namoyish etadi.
Global XR Dasturlash uchun Eng Yaxshi Amaliyotlar
Global auditoriya uchun WebXR ilovalarini ishlab chiqayotganda, kiritishni boshqarish uchun ushbu eng yaxshi amaliyotlarni hisobga oling:
- Kiritishni Boshqarishni Abstraktlashtirish: Tugma indekslarini to'g'ridan-to'g'ri o'yin mantig'ingizga kodlamang. Mantiqiy harakatlarni (masalan, 'sakrash', 'otish', 'ushlash') ma'lum tugma indekslari va kontroller turlariga moslashtiradigan kiritish menejeri yoki abstraksiya qatlamini yarating. Bu sizning kodingizni yanada qo'llab-quvvatlanadigan va turli uskunalarga moslashuvchan qiladi.
- Aniq Vizual Fikr-mulohaza Bilan Ta'minlang: Tugma bosilganda yoki ushlash faollashtirilganda, XR sahnasida darhol vizual fikr-mulohaza mavjudligiga ishonch hosil qiling. Bu UI elementini ajratib ko'rsatish, qahramon qo'lini animatsiya qilish yoki vizual effekt ko'rsatish bo'lishi mumkin.
- Umumiy Bog'lanishlarga Standartlash: Harakatlanish va tanlash kabi standart harakatlar uchun turli platformalardagi foydalanuvchilar uchun tanishlikni ta'minlash maqsadida keng qabul qilingan kontroller moslamalariga rioya qiling.
- Qayta Bog'lashga Ruxsat Bering: Agar ilovangiz murakkab bo'lsa, foydalanuvchilarga boshqaruvni o'z xohishlariga ko'ra qayta bog'lash uchun ilova ichidagi variantni amalga oshirishni o'ylab ko'ring. Bu ayniqsa maxsus ehtiyojlar va foydalanuvchi qulayligi uchun muhimdir.
- Nafis Degradatsiya: Ilovangizni cheklangan kiritish imkoniyatlari bilan ham funktsional bo'lishi uchun loyihalashtiring. Agar foydalanuvchida faqat asosiy kontrollerlar bo'lsa, asosiy o'yin jarayoni hali ham mumkin ekanligiga ishonch hosil qiling.
- Turli Uskunalar Bilan Sinovdan O'tkazing: Agar iloji bo'lsa, ilovangizni turli global mintaqalarda mashhur bo'lgan turli VR/AR garnituralari va kontrollerlarida sinab ko'ring.
- Maxsus Ehtiyojlarni Hisobga Oling: Harakat buzilishlari bo'lgan foydalanuvchilar haqida o'ylang. Harakatlarni oddiyroq kiritishlar bilan ishga tushirish mumkinmi? Tugma bosishlarini uzoqroq vaqt ushlab turish mumkinmi?
- UI Matnini Xalqarolashtirish: To'g'ridan-to'g'ri tugma holatlariga bog'liq bo'lmasa-da, boshqaruv elementlari bilan bog'liq har qanday UI elementlari yoki ko'rsatmalar sizning maqsadli tillaringiz uchun mahalliylashtirilganligiga ishonch hosil qiling.
Murakkab Stsenariylar va Kelajakdagi Imkoniyatlar
WebXR API doimiy ravishda rivojlanmoqda va kiritish imkoniyatlari kengaymoqda:
- Qo'l Harakatini Kuzatish: Kontrollerlardan tashqari, WebXR to'g'ridan-to'g'ri qo'l harakatini kuzatishni tobora ko'proq qo'llab-quvvatlamoqda. Bu imo-ishoralar va barmoq pozitsiyalarini talqin qilishni o'z ichiga oladi, bu esa kiritishni aniqlash uchun boshqacha yondashuvni talab qiladi, ammo uzluksiz holatni kuzatishning asosiy tamoyillariga asoslanadi.
- Ko'z Harakatini Kuzatish: Kelajakdagi iteratsiyalar nigohga asoslangan o'zaro ta'sir va foveated rendering uchun ko'z harakatini kuzatish ma'lumotlarini o'z ichiga olishi mumkin, bu esa immersiv tajribalarni yanada boyitadi.
- Haptik Fikr-mulohaza: Kiritish bo'lmasa-da, kontrollerlar orqali haptik fikr-mulohaza (tebranishlar) berish qobiliyati mavjudlik va o'zaro ta'sir hissini sezilarli darajada oshiradi. WebXR foydalanuvchi kiritishiga asoslangan holda ushbu effektlarni ishga tushirish uchun API'larni taqdim etadi.
- Imo-ishoralarni Aniqlash uchun Mashinaviy O'rganish: ML modellari yanada qulayroq bo'lgan sari, dasturchilar ulardan tugma bosishlari yoki kontroller harakatlarining murakkab ketma-ketligini murakkab imo-ishoralar sifatida talqin qilish uchun foydalanishlari mumkin.
Xulosa
WebXR kontroller tugmalari holatini kuzatishni o'zlashtirish vebda qiziqarli va interaktiv immersiv tajribalar yaratishni maqsad qilgan har qanday dasturchi uchun ajralmas mahoratdir. `XRSession`, `XRInputSource` va asosiy `Gamepad` API'sini tushunib, siz jismoniy kontroller harakatlarini ilova ichidagi mazmunli hodisalarga aylantirish kuchiga ega bo'lasiz. Ishonchli holatni boshqarishga ustuvor ahamiyat berishni, global uskunalarning xilma-xil assortimentini hisobga olishni va maksimal moslashuvchanlik uchun kiritish mantig'ingizni abstraktlashtirishni unutmang.
WebXR rivojlanishda davom etar ekan, kiritishni boshqarishning nozikliklari yanada murakkablashadi. Bugun kuchli poydevor qurib, siz ertangi kunning hayajonli yangiliklaridan foydalanishga va butun dunyo bo'ylab foydalanuvchilarga chinakam jozibali XR kontentini taqdim etishga yaxshi tayyor bo'lasiz.
Asosiy Xulosalar:
- Ulangan kontrollerlarni topish uchun `xrSession.inputSources` dan foydalaning.
- Tugma holatlariga `inputSource.gamepad.buttons` orqali kiring.
- Ishonchli hodisalarni aniqlash uchun tugma o'tishlarini (bosish/qo'yib yuborish) kuzating.
- Ikkilik holatlar uchun `pressed` va analog kiritish uchun `value` dan foydalaning.
- Tugma indekslari moslamalariga e'tibor bering va maqsadli uskunada sinovdan o'tkazing.
- Qo'llab-quvvatlanuvchanlik va global muvofiqlik uchun kiritishni boshqarishni abstraktlashtiring.
Immersiv vebda dasturlashda omad!